/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista.personas.pacientes;

import java.util.ArrayList;
import java.util.Iterator;
import modelo.personas.Domicilio;
import modelo.personas.pacientes.*;
import prolog.GestorPrologPaciente;
import vista.GestorVistaEditor;

/**
 *
 * @author raul
 */
public class GestorVistaHistoriaClinicaDlg extends GestorVistaEditor {
    
    private HistoriaClinicaDlg formulario;
    private GestorPaciente gestorModelo = new GestorPaciente();
    private GestorTablaConsultas gestorTabla;
    private String reporte = "/vista/personas/pacientes/HistoriaClinica.jasper";
    
    public GestorVistaHistoriaClinicaDlg(Object paciente) {
        gestorModelo.setModelo((Paciente) paciente);
        super.setModo(MODIFICACION);
    }

    @Override
    public String getNombreObjeto() {
        return "La Historia Clínica";
    }

    @Override
    public void cerrarFormulario() {
        getFormulario().dispose();
    }

    @Override
    public void abrirFormulario() {
        setFormulario(new HistoriaClinicaDlg( this));
        gestorTabla = new GestorTablaConsultas(gestorModelo, formulario);
        inicializarVista();
        formulario.setVisible(true);
    }

    @Override
    public HistoriaClinicaDlg getFormulario() {
        return formulario;
    }
    
    public void setFormulario(HistoriaClinicaDlg formulario) {
        this.formulario = formulario;
    }

    @Override
    public GestorPaciente getGestorModelo() {
        return gestorModelo;
    }

    @Override
    public void inicializarVista() {
        getFormulario().getEnfermedadesAbmPnl().setGestorVista(gestorTabla);
        setearVistaConModelo();
    }

    @Override
    public void setearModeloConVista() {
        HistoriaClinica hc = gestorModelo.getModelo().getHistoriaClinica();
        hc.setAntecedentesPersonalesNoPatologicos(
                getFormulario().getAntecedentesPersonalesNoPatologicosTxt().getText());
        hc.setEnfermedadesInfecciosasDeLaInfancia(
                getFormulario().getEnfermedadesInfecciosasDeLaInfanciaTxt().getText());
        hc.setIntervencionesQuirurgicas(
                (Integer) getFormulario().getIntervencionesQuirurgicasNum().getValue());
        hc.setHospitalizaciones(
                (Integer) getFormulario().getHospitalizacionesNum().getValue());
        hc.setTranfusiones(
                (Integer) getFormulario().getTranfusionesNum().getValue());
        hc.setAntecedentesPersonalesPatologicos(
                getFormulario().getAntecedentesPersonalesPatologicosTxt().getText());
    }

    @Override
    public void setearVistaConModelo() {
        Paciente modelo = getGestorModelo().getModelo();
        getFormulario().getNroHistoriaClinicaTxt().setText(modelo.getHistoriaClinica().getNumero().toString());
        getFormulario().getNombreTxt().setText(modelo.getNombre());
        getFormulario().getApellidoTxt().setText(modelo.getApellido());
        getFormulario().getSexoTxt().setText(modelo.getSexo());
        getFormulario().getEdadTxt().setText(String.valueOf(modelo.getEdad()));
        this.setearDomicilioEnVista(modelo.getDomicilios().iterator().next());
        
        getFormulario().cargarArbolEnfermedadesDeParientes(construirJerarquia());
        
        getFormulario().getAntecedentesPersonalesNoPatologicosTxt()
                .setText(modelo.getHistoriaClinica().getAntecedentesPersonalesNoPatologicos());
        getFormulario().getEnfermedadesInfecciosasDeLaInfanciaTxt()
                .setText(modelo.getHistoriaClinica().getEnfermedadesInfecciosasDeLaInfancia());
        getFormulario().getIntervencionesQuirurgicasNum()
                .setValue(modelo.getHistoriaClinica().getIntervencionesQuirurgicas());
        getFormulario().getHospitalizacionesNum()
                .setValue(modelo.getHistoriaClinica().getHospitalizaciones());
        getFormulario().getTranfusionesNum()
                .setValue(modelo.getHistoriaClinica().getTranfusiones());
        getFormulario().getAntecedentesPersonalesPatologicosTxt()
                .setText(modelo.getHistoriaClinica().getAntecedentesPersonalesPatologicos());
        gestorTabla.cargarEnfermedades();
        
    }
    
    private void setearDomicilioEnVista(Domicilio domicilio){
        getFormulario().getCalleTxt().setText(domicilio.getCalle());
        getFormulario().getAlturaTxt().setValue(domicilio.getAltura());
        getFormulario().getProvinciaTxt().setText(domicilio.getLocalidad().getProvincia().toString());
        getFormulario().getLocalidadTxt().setText(domicilio.getLocalidad().toString());
        
    }
    
    //construie la jerarquia de objetos que componen el arbol
    //el primer elemento de cada array es el padre y los siguientes los hijos del mismo
    Object [] construirJerarquia() {
        int size = gestorModelo.getModelo().getParientes().size();
        Object[] jerarquia = new Object[size +1];
        int ix = 0;
        jerarquia[ix] = "Raiz";
        Iterator<Pariente> it = gestorModelo.getModelo().getParientes().iterator();
        while (it.hasNext()) {
            ArrayList rama = new ArrayList();
            Pariente p = it.next();
            rama.add(p);
            Iterator<DetalleHistoriaClinica> j = p.getEnfermedades().iterator();
            while (j.hasNext()) {
                rama.add(j.next().getEnfermedad());
            }
            jerarquia[++ix] = rama.toArray();
        }
        return jerarquia;
    }

    void deshacer() {
        if (!isCreacion()) gestorModelo.eliminarConsultasNoGuardadas();
    }

    @Override
    public void accionPostGuardado() {
        GestorPrologPaciente gpp = new GestorPrologPaciente();
        gpp.actualizarEnfermedadesPaciente(gestorModelo.getModelo());
    }

    void imprimir() {
        ArrayList lista = new ArrayList();
        lista.add(gestorModelo.getModelo());
        super.mostrarReporte(reporte,
                "Historia Clínica", lista);
    }

}
